from django.http import HttpResponse
from django.http import HttpResponseBadRequest
from django.http import JsonResponse
from django.shortcuts import render

# Create your views here.
from django.views import View

from libs.yuntongxun.sms import CCP


class ImageCodeView(View):
    # uuid 是从urls表中传过来的
    def get(self,request,uuid):
        # 1 获取前端提交的uuid
        # 2 生成图片验证码（图片二进制，图片里的内容）
        from libs.captcha.captcha import captcha
        # text 就是生成的图片验证码的内容 例如 abdi
        # image 就是图片二进制
        text,image = captcha.generate_captcha()
        # 3 将uuid和图片中的内容保存到redis中
        # 3.1 链接redis
        from django_redis import get_redis_connection
        # code 是配置信息中三号库的名字
        redis_conn = get_redis_connection('code')
        # redis_conn.setex(key,second,value)  # key 是uuid | seconds是过期时间|
        redis_conn.setex(uuid,120,text)

        # 4 返回图片
        # content_type MIME类型
        return HttpResponse(image,content_type='image/jpeg')


class SmsCodeView(View):
    # mobile 是从urls表中传过来的
    def get(self,request,mobile):

        image_code=request.GET.get('image_code')
        image_code_id=request.GET.get('image_code_id')

        if not all([image_code,image_code_id]):
            return HttpResponseBadRequest('参数不全')

        # 连接redis
        from django_redis import get_redis_connection
        redis_conn = get_redis_connection('code')
        # 获取指定数据
        redis_text = redis_conn.get(image_code_id)
        if redis_text is None:
            return HttpResponseBadRequest('图片验证码已经过期')
        if redis_text.decode().lower() != image_code.lower():
            return HttpResponseBadRequest('图片验证码不一致')
        # 生成一个随机短信验证码
        # 六位数值
        from random import randint
        sms_code='%06d'%randint(0,999999)

        # 保存短信验证码
        redis_conn.setex('sms_%s'%mobile,300,sms_code)

        from celery_tasks.sms.tasks import send_sms_code
        # 任务的参数，平移到delay中
        # delay中　添加函数的参数
        send_sms_code.delay(mobile,sms_code)

        # 发送短信

        # 返回相应
        return JsonResponse({'msg':'ok','code':"0"})



        pass

